/*
    simplecookbook  -  simplecookbook.receitas.RepositorioReceitasSQLiteDataBase.java
                             -------------------
    begin                : 08/10/2008
    copyright            : (C) 2008 by cristovao
    email                : cristovao.wollieson@gmail.com
 ***************************************************************************/

/*
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful, but   *
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   General Public License for more details.                              *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,   *
 *   MA  02111-1307 USA                                                    *
 ***************************************************************************/

/**
 * Pacote responsavel pelo controle de receitas do sistema
 * 
 * @author cristovao
 */
package org.ybacoby.simplecookbook.receitas;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import org.ybacoby.simplecookbook.database.EnumTabelaDataBase;
import org.ybacoby.simplecookbook.database.IDataBase;
import org.ybacoby.simplecookbook.database.IRepositorioDatabase;
import org.ybacoby.simplecookbook.exception.SimpleCookBookException;



/**
 * @author cristovao
 *
 */
public class RepositorioReceitasSQLiteDataBase implements IRepositorioDatabase<Receitas> {

	/**
	 * O Banco de dados que sera usado no sistema
	 */
	private IDataBase database;
	
	/**
	 * Constructor
	 * 
	 * @param database Banco de dados que sera usado para controle de dados
	 */
	public RepositorioReceitasSQLiteDataBase(IDataBase database) {
		this.database = database;
	}

	/**
	 * @see simplecookbook.database.IRepositorioReceitas#adicionar(org.ybacoby.simplecookbook.receitas.Receitas)
	 */
	public void adicionar(Receitas receita) throws SimpleCookBookException {
		// Preparando o comando sql que sera inserido
		String sql = "INSERT INTO RECEITAS (NM_RECEITA, TM_PREPARO, QTD_PORCOES, QTD_PESSOAS, VL_NOTA, DC_PREPARO) VALUES ('"
			+ receita.getNome() +"', '"
			+ receita.getTempoPreparo() +"', "
			+ receita.getPorcoes() +", "
			+ receita.getQtdPessoas() +", "
			+ receita.getNota() +", '"
			+ receita.getPreparo()+"');";
		
		/*sql = "insert into receita values ("
			+ receita.getCodigo() +", '"
			+ receita.getNome() +"', '"
			+ receita.getTempoPreparo() +"', "
			+ receita.getPorcoes() +", "
			+ receita.getQtdPessoas() +", "
			+ receita.getNota() +", '"
			+ receita.getPreparo()+"');";*/
		
		// Inserindo os dados objetos no banco de dados
		this.database.insertSqlDatabase(sql);

	}

	/**
	 * @see simplecookbook.database.IRepositorioReceitas#alterar(org.ybacoby.simplecookbook.receitas.Receitas)
	 */
	public void alterar(Receitas receita) throws SimpleCookBookException {
		// Preparando o comando sql que sera inserido
		String sql = "UPDATE RECEITAS SET CD_RECEITA="
			+ receita.getCodigo() +", NM_RECEITA='" 
			+ receita.getNome() + "', TM_PREPARO='"
			+ receita.getTempoPreparo() +"', QTD_PORCOES="
			+ receita.getPorcoes() +", QTD_PESSOAS="
			+ receita.getQtdPessoas() +", VL_NOTA="
			+ receita.getNota() +", DC_PREPARO='"
			+ receita.getPreparo() +"' WHERE CD_RECEITA="
			+ receita.getCodigo()+";";
		
		// Inserindo os dados objetos no banco de dados
		this.database.insertSqlDatabase(sql);

	}

	/**
	 * @see simplecookbook.database.IRepositorioReceitas#excluir(org.ybacoby.simplecookbook.receitas.Receitas)
	 */
	public void excluir(Receitas receita) throws SimpleCookBookException {
		// Preparando o comando sql que sera inserido
		String sql = "DELETE FROM RECEITAS WHERE CD_RECEITA="
			+receita.getCodigo()+";";
		
		// Inserindo os dados objetos no banco de dados
		this.database.insertSqlDatabase(sql);

	}

	/**
	 * @see simplecookbook.database.IRepositorioReceitas#procurar(org.ybacoby.simplecookbook.receitas.Receitas)
	 */
	public ArrayList<Receitas> procurar(Receitas receita)
			throws SimpleCookBookException {
		// Preparando o comando sql para busca default
		String sql = "SELECT * FROM RECEITAS;";
		
		// Criando o objeto ArrayList para receber todos os ingredientes
		ArrayList<Receitas> receitas = new ArrayList<Receitas>();
		
		// Verificando se existe algum valor no parametro do metodo
		if (receita.getCodigo() != null) sql = "SELECT * FROM RECEITAS WHERE CD_RECEITA="
			+ receita.getCodigo() +";";
		else if (receita.getNome() != null) sql = "SELECT * FROM RECEITAS WHERE NM_RECEITA LIKE '"
			+ receita.getNome() +"%';";
		else if (receita.getTempoPreparo() != null) sql = "SELECT * FROM RECEITAS WHERE TM_PREPARO LIKE '"
			+ receita.getTempoPreparo() +"%';";
		else if (receita.getPorcoes() != null) sql = "SELECT * FROM RECEITAS WHERE QTD_PORCOES="
			+ receita.getPorcoes() +";";
		else if (receita.getQtdPessoas() != null) sql = "SELECT * FROM RECEITAS WHERE QTD_PESSOAS="
			+ receita.getQtdPessoas() +";";
		else if (receita.getNota() != null) sql = "SELECT * FROM RECEITAS WHERE VL_NOTA="
			+ receita.getNota() +";";

		// Recebendo todos os dados na pesquisa em sql
		ResultSet rs = this.database.selectSqlDatabase(sql);

		// Verificando se todos os valores estao sendo recebidos juntamente com seus valores nulos
		try {
			while (rs.next()) {
				
				// Criando um objeto do tipo Ingredientes para ser sempre introduzido no array
				Receitas receitasReturn = new Receitas();
				
				// Pegando dados de Ingredientes
				receitasReturn.setCodigo(rs.getString("CD_RECEITA"));
				receitasReturn.setNome(rs.getString("NM_RECEITA"));
				receitasReturn.setTempoPreparo(rs.getString("TM_PREPARO"));
				receitasReturn.setPorcoes(rs.getString("QTD_PORCOES"));
				receitasReturn.setQtdPessoas(rs.getString("QTD_PESSOAS"));
				receitasReturn.setNota(rs.getString("VL_NOTA"));
				receitasReturn.setPreparo(rs.getString("DC_PREPARO"));
				
				// Adicionando ao array de ingredientes
				receitas.add(receitasReturn);
			}
		} catch (SQLException e) {
			throw new SimpleCookBookException();
		}
		
		// Retornando o array de receitas do banco de dados
		return receitas;
	}

	/**
	 * @see simplecookbook.database.IRepositorioReceitas#totalReceitas()
	 */
	public int totalItens() throws SimpleCookBookException {
		return this.database.totalItensDataSql(EnumTabelaDataBase.RECEITA);
	}

}
